package JavaGrammar.TreeScanners;

import java.util.*;
import java.lang.reflect.*;

import SymbolTable.*;
import FlowGraph.*;
import FlowGraph.Nodes.*;
import FlowGraph.EdgeInfo.*;
import FlowGraph.StatementInfo.*;
import JavaGrammar.*;
import util.*;
import db.ClassData;
import FlowGraph.Transformations.*;
import FlowGraph.SSA.*;

import antlr.*;
// $ANTLR 2.7.1: "ConstantFolding.g" -> "ConstantFolding.java"$

import antlr.TreeParser;
import antlr.Token;
import antlr.collections.AST;
import antlr.RecognitionException;
import antlr.ANTLRException;
import antlr.NoViableAltException;
import antlr.MismatchedTokenException;
import antlr.SemanticException;
import antlr.collections.impl.BitSet;
import antlr.ASTPair;
import antlr.collections.impl.ASTArray;


/** Java 1.3 AST Recognizer Grammar
 *
 * Author: (see java.g preamble)
 *
 * This grammar is in the PUBLIC DOMAIN
 */
public class ConstantFolding extends antlr.TreeParser
       implements ConstantFoldingTokenTypes
 {


    public void reset() {
        _currentExprValue = null;
    }

    public Object getExprValue() {
        return _currentExprValue;
    }

    // Representa o valor processado na ultima expr. E null quando nao se sabe
    // calcula-lo. Quando for um valor constante null, ai e um Object
    private Object _currentExprValue;


    private void _replaceAST(AST node, Object constant) {

        if(constant instanceof Boolean) {
            if(((Boolean)constant).booleanValue()) {
	        node.setText("true");
		node.setType(LITERAL_true);
	    }
	    else {
	        node.setText("false");
		node.setType(LITERAL_false);
	    }
	    node.setFirstChild(null);
	}
	else
	if(constant instanceof Integer) {

	}
	else
	if(constant instanceof Character) {

	}
	else
	if(constant instanceof Boolean) {

	}
	else
	if(constant instanceof String) {

	}
	else
	if(constant instanceof Float) {

	}
	else
	if(constant instanceof Double) {

	}
	else
	if(constant instanceof Long) {

	}
    }
    
    private void _oper(AST op, Object v1) {
        if(v1 == null) {
	    _currentExprValue = null;
	    return;
	}
	
	if(v1 instanceof Integer) {
	    int i1 = ((Integer)v1).intValue();
	    int res = 0;
	    switch(op.getType()) {
	        case POST_INC:
                case INC: res = i1 + 1; break;
                case POST_DEC:
		case DEC: res = i1 - 1; break;
		case UNARY_PLUS: res = +i1; break;
		case UNARY_MINUS: res = -i1; break;
	    }
	    
	    op.setType(NUM_INT);
	    op.setText(new String("" + res));
	    op.setFirstChild(null);
	    _currentExprValue = new Integer(res);
	}
	else
	if(v1 instanceof Float) {
	    float i1 = ((Float)v1).floatValue();
	    float res = 0;
	    switch(op.getType()) {
	        case POST_INC:
                case INC: res = i1 + 1; break;
                case POST_DEC:
		case DEC: res = i1 - 1; break;
		case UNARY_PLUS: res = +i1; break;
		case UNARY_MINUS: res = -i1; break;
	    }

	    op.setType(NUM_FLOAT);
	    op.setText(new String("" + res));
	    op.setFirstChild(null);
	    _currentExprValue = new Float(res);
	}
	else
	if(v1 instanceof Double) {
	    double i1 = ((Double)v1).doubleValue();
	    double res = 0;
	    switch(op.getType()) {
	        case POST_INC:
                case INC: res = i1 + 1; break;
                case POST_DEC:
		case DEC: res = i1 - 1; break;
		case UNARY_PLUS: res = +i1; break;
		case UNARY_MINUS: res = -i1; break;
	    }
	    op.setType(NUM_DOUBLE);
	    op.setText(new String("" + res));
	    op.setFirstChild(null);
	    _currentExprValue = new Double(res);
	}
	else
	if(v1 instanceof Long) {
            long i1 = ((Long)v1).longValue();
	    long res = 0;
	    switch(op.getType()) {
	    	case POST_INC:
                case INC: res = i1 + 1; break;
                case POST_DEC:
		case DEC: res = i1 - 1; break;
		case UNARY_PLUS: res = +i1; break;
		case UNARY_MINUS: res = -i1; break;
	    }

	    op.setType(NUM_LONG);
	    op.setText(new String("" + res));
	    op.setFirstChild(null);
	    _currentExprValue = new Long(res);
	}
    }

    private void _oper(AST op, Object v1, Object v2) {
        if(v1 == null || v2 == null) {
	    _currentExprValue = null;
	    return;
	}

        switch(op.getType()) {	
	    case BSR:
	    case SL:
	    case SR: _shiftFunc(op, v1, v2); break;
	}

        if(v1 instanceof Integer) {
            int i1 = ((Integer)v1).intValue();
	    if(v2 instanceof Integer) {
                int i2 = ((Integer)v2).intValue();
		
		switch(op.getType()) {		
		    case LT:
		    case GT:
		    case GE:
		    case LE: _cmpFunc(op, i1, i2); break;
		    case MOD:
		    case STAR:
		    case DIV:
		    case MINUS:
		    case PLUS: _addmultFunc(op, i1, i2); break;
		}
	    }
            else
	    if(v2 instanceof Float) {
	        float i2 = ((Float)v2).floatValue();
		
		switch(op.getType()) {
		    case LT:
		    case GT:
		    case GE:
		    case LE: _cmpFunc(op, i1, i2); break;
		    case MOD:
		    case STAR:
		    case DIV:
		    case MINUS:
		    case PLUS: _addmultFunc(op, (float)i1, i2); break;
		}
	    }
	    else
	    if(v2 instanceof Double) {
	        double i2 = ((Double)v2).doubleValue();

		switch(op.getType()) {		
		    case LT:
		    case GT:
		    case GE:
		    case LE: _cmpFunc(op, i1, i2); break;
		    case MOD:
		    case STAR:
		    case DIV:
		    case MINUS:
		    case PLUS: _addmultFunc(op, (double)i1, i2); break;
		}
            }
	    else
	    if(v2 instanceof Long) {
		long i2 = ((Long)v2).longValue();

		switch(op.getType()) {		
		    case LT:
		    case GT:
		    case GE:
		    case LE: _cmpFunc(op, i1, i2); break;
		    case MOD:
		    case STAR:
		    case DIV:
		    case MINUS:
		    case PLUS: _addmultFunc(op, (long)i1, i2); break;
		}
            }
	    else {
	        _currentExprValue = null;
	    }
	}
	else
	if(v1 instanceof Float) {
	    float i1 = ((Float)v1).floatValue();
	    if(v2 instanceof Integer) {
                int i2 = ((Integer)v2).intValue();

		switch(op.getType()) {		
		    case LT:
		    case GT:
		    case GE:
		    case LE: _cmpFunc(op, i1, i2); break;
		    case MOD:
		    case STAR:
		    case DIV:
		    case MINUS:
		    case PLUS: _addmultFunc(op, i1, (float)i2); break;
		}
	    }
            else
	    if(v2 instanceof Float) {
	        float i2 = ((Float)v2).floatValue();

		switch(op.getType()) {		
		    case LT:
		    case GT:
		    case GE:
		    case LE: _cmpFunc(op, i1, i2); break;
		    case MOD:
		    case STAR:
		    case DIV:
		    case MINUS:
		    case PLUS: _addmultFunc(op, i1, i2); break;
		}
	    }
	    else
	    if(v2 instanceof Double) {
	        double i2 = ((Double)v2).doubleValue();

		switch(op.getType()) {		
		    case LT:
		    case GT:
		    case GE:
		    case LE: _cmpFunc(op, i1, i2); break;
		    case MOD:
		    case STAR:
		    case DIV:
		    case MINUS:
		    case PLUS: _addmultFunc(op, (double)i1, i2); break;
		}
            }
	    else
	    if(v2 instanceof Long) {
		long i2 = ((Long)v2).longValue();

		switch(op.getType()) {		
		    case LT:
		    case GT:
		    case GE:
		    case LE: _cmpFunc(op, i1, i2); break;
		    case MOD:
		    case STAR:
		    case DIV:
		    case MINUS:
		    case PLUS: _addmultFunc(op, i1, (float)i2); break;
		}
            }
	    else {
	        _currentExprValue = null;
	    }
	}
	else
	if(v1 instanceof Double) {
	    double i1 = ((Double) v1).doubleValue();
	    if(v2 instanceof Integer) {
                int i2 = ((Integer)v2).intValue();
		
		switch(op.getType()) {		
		    case LT:
		    case GT:
		    case GE:
		    case LE: _cmpFunc(op, i1, i2); break;
		    case MOD:
		    case STAR:
		    case DIV:
		    case MINUS:
		    case PLUS: _addmultFunc(op, i1, (double)i2); break;
		}		
	    }
            else
	    if(v2 instanceof Float) {
	        float i2 = ((Float)v2).floatValue();

		switch(op.getType()) {		
		    case LT:
		    case GT:
		    case GE:
		    case LE: _cmpFunc(op, i1, i2); break;
		    case MOD:
		    case STAR:
		    case DIV:
		    case MINUS:
		    case PLUS: _addmultFunc(op, i1, (double)i2); break;
		}
	    }
	    else
	    if(v2 instanceof Double) {
	        double i2 = ((Double)v2).doubleValue();
		
		switch(op.getType()) {		
		    case LT:
		    case GT:
		    case GE:
		    case LE: _cmpFunc(op, i1, i2); break;
		    case MOD:
		    case STAR:
		    case DIV:
		    case MINUS:
		    case PLUS: _addmultFunc(op, i1, i2); break;
		}
            }
	    else
	    if(v2 instanceof Long) {
		long i2 = ((Long)v2).longValue();

		switch(op.getType()) {		
		    case LT:
		    case GT:
		    case GE:
		    case LE: _cmpFunc(op, i1, i2); break;
		    case MOD:
		    case STAR:
		    case DIV:
		    case MINUS:
		    case PLUS: _addmultFunc(op, i1, (double)i2); break;
		}
            }
	    else {
	        _currentExprValue = null;
	    }
	}
	else
 	if(v1 instanceof Long) {
	    long i1 = ((Long) v1).longValue();
            if(v2 instanceof Integer) {
                int i2 = ((Integer)v2).intValue();

		switch(op.getType()) {		
		    case LT:
		    case GT:
		    case GE:
		    case LE: _cmpFunc(op, i1, i2); break;
		    case MOD:
		    case STAR:
		    case DIV:
		    case MINUS:
		    case PLUS: _addmultFunc(op, i1, (long)i2); break;
		}		
	    }
            else
	    if(v2 instanceof Float) {
	        float i2 = ((Float)v2).floatValue();

		switch(op.getType()) {		
		    case LT:
		    case GT:
		    case GE:
		    case LE: _cmpFunc(op, i1, i2); break;
		    case MOD:
		    case STAR:
		    case DIV:
		    case MINUS:
		    case PLUS: _addmultFunc(op, (float)i1, i2); break;
		}
	    }
	    else
	    if(v2 instanceof Double) {
	        double i2 = ((Double)v2).doubleValue();

		switch(op.getType()) {		
		    case LT:
		    case GT:
		    case GE:
		    case LE: _cmpFunc(op, i1, i2); break;
		    case MOD:
		    case STAR:
		    case DIV:
		    case MINUS:
		    case PLUS: _addmultFunc(op, (double)i1, i2); break;
		}				       
            }
	    else
	    if(v2 instanceof Long) {
		long i2 = ((Long)v2).longValue();
		
		switch(op.getType()) {
		    case LT:
		    case GT:
		    case GE:
		    case LE: _cmpFunc(op, i1, i2); break;
		    case MOD:
		    case STAR:
		    case DIV:
		    case MINUS:
		    case PLUS: _addmultFunc(op, i1, i2); break;
		}
            }
	    else {
	        _currentExprValue = null;
	    }
	} 
	else {
	    _currentExprValue = null;
        }
    
    }

    private void _cmpFunc(AST op, double i1, double i2) {
        boolean res = false;
	switch(op.getType()) {
	    case LT: res = i1 < i2; break;
	    case GT: res = i1 > i2; break;
	    case LE: res = i1 <= i2; break;
	    case GE: res = i1 >= i2; break;
	}

	if(res) {
            op.setType(LITERAL_true);
	    op.setText("true");
	    _currentExprValue = new Boolean(true);
	}
	else {
	    op.setType(LITERAL_false);
	    op.setText("false");
	    _currentExprValue = new Boolean(false);
	}
	op.setFirstChild(null);
    }

    // So pode ser int ou long os argumentos
    private void _shiftFunc(AST op, Object v1, Object v2) {
        if(v1 == null || v2 == null) {
	    _currentExprValue = null;
	    return;
        }
    
        if(v1 instanceof Integer) {
	    int i1 = ((Integer)v1).intValue();
	    if(v2 instanceof Integer) {
	        int i2 = ((Integer)v2).intValue();

	        int res = 0;
                if(op.getType() == SL) {
		    res = i1 << i2;
		}
		else
		if(op.getType() == SR) {
		    res = i1 >> i2;
		}
		else
		if(op.getType() == BSR) {
		    res = i1 >>> i2;
		}

		op.setType(NUM_INT);
		op.setText(new String("" + res));
		op.setFirstChild(null);
		_currentExprValue = new Integer(res);
	    }
	    else {
	        long l2 = ((Long)v2).longValue();

		int res = 0;
                if(op.getType() == SL) {
		    res = i1 << l2;
		}
		else 
		if(op.getType() == SR) {
		    res = i1 >> l2;
		}
		else
		if(op.getType() == BSR) {
		    res = i1 >>> l2;
		}

		op.setType(NUM_INT);
		op.setText(new String("" + res));
		op.setFirstChild(null);
		_currentExprValue = new Integer(res);
	    }
	}
	else {
            long l1 = ((Long)v1).longValue();
	    if(v2 instanceof Integer) {
	        int i2 = ((Integer)v2).intValue();

	        long res = 0;
                if(op.getType() == SL) {
		    res = l1 << i2;
		}
		else
		if(op.getType() == SR) {
		    res = l1 >> i2;
		}
		else
		if(op.getType() == BSR) {
		    res = l1 >>> i2;
		}

		op.setType(NUM_LONG);
		op.setText(new String("" + res));
		op.setFirstChild(null);
		_currentExprValue = new Long(res);
	    }
	    else {
	        long l2 = ((Long)v2).longValue();

	        long res = 0;
                if(op.getType() == SL) {
		    res = l1 << l2;
		}
		else 
		if(op.getType() == SR) {
		    res = l1 >> l2;
		}
		else
	        if(op.getType() == BSR) {
		    res = l1 >>> l2;
		}

		op.setType(NUM_LONG);
		op.setText(new String("" + res));
		op.setFirstChild(null);
		_currentExprValue = new Long(res);
	    }
	}
    }

    private void _addmultFunc(AST op, int i1, int i2) {    
        int res = 0;
	switch(op.getType()) {
	    case PLUS: res = i1 + i2; break;
	    case MINUS: res = i1 - i2; break;
	    case DIV: res = i1 / i2; break;
	    case MOD: res = i1 % i2; break;
	    case STAR: res = i1 * i2; break;
	}	
	op.setType(NUM_INT);
	op.setText(new String("" + res));
	op.setFirstChild(null);
	_currentExprValue = new Integer(res);
    }

    private void _addmultFunc(AST op, float i1, float i2) {    
        float res = 0;
	switch(op.getType()) {
	    case PLUS: res = i1 + i2; break;
	    case MINUS: res = i1 - i2; break;
	    case DIV: res = i1 / i2; break;
	    case MOD: res = i1 % i2; break;
	    case STAR: res = i1 * i2; break;
	}
	op.setType(NUM_FLOAT);
	op.setText(new String("" + res));
	op.setFirstChild(null);
	_currentExprValue = new Float(res);
    }

    private void _addmultFunc(AST op, long i1, long i2) {
        long res = 0;
	switch(op.getType()) {
	    case PLUS: res = i1 + i2; break;
	    case MINUS: res = i1 - i2; break;
	    case DIV: res = i1 / i2; break;
	    case MOD: res = i1 % i2; break;
	    case STAR: res = i1 * i2; break;
	}
	op.setType(NUM_LONG);
	op.setText(new String("" + res));
	op.setFirstChild(null);
	_currentExprValue = new Long(res);
    }

    private void _addmultFunc(AST op, double i1, double i2) {
        double res = 0;
	switch(op.getType()) {
	    case PLUS: res = i1 + i2; break;
	    case MINUS: res = i1 - i2; break;
	    case DIV: res = i1 / i2; break;
	    case MOD: res = i1 % i2; break;
	    case STAR: res = i1 * i2; break;
	}
	op.setType(NUM_DOUBLE);
	op.setText(new String("" + res));
	op.setFirstChild(null);
	_currentExprValue = new Double(res);
    }
public ConstantFolding() {
	tokenNames = _tokenNames;
}

	public final void statement(AST _t) throws RecognitionException {
		
		AST statement_AST_in = (AST)_t;
		
		try {      // for error handling
			if (_t==null) _t=ASTNULL;
			switch ( _t.getType()) {
			case VARIABLE_DEF:
			{
				variableDef(_t);
				_t = _retTree;
				break;
			}
			case METHOD_CALL:
			{
				AST __t2 = _t;
				AST tmp1_AST_in = (AST)_t;
				match(_t,METHOD_CALL);
				_t = _t.getFirstChild();
				primaryExpression(_t);
				_t = _retTree;
				elist(_t);
				_t = _retTree;
				_t = __t2;
				_t = _t.getNextSibling();
				break;
			}
			case EXPR:
			{
				expression(_t);
				_t = _retTree;
				break;
			}
			case SUPER_CTOR_CALL:
			case CTOR_CALL:
			{
				ctorCall(_t);
				_t = _retTree;
				break;
			}
			default:
			{
				throw new NoViableAltException(_t);
			}
			}
		}
		catch (RecognitionException ex) {
			reportError(ex);
			if (_t!=null) {_t = _t.getNextSibling();}
		}
		_retTree = _t;
	}
	
	public final void variableDef(AST _t) throws RecognitionException {
		
		AST variableDef_AST_in = (AST)_t;
		
		try {      // for error handling
			AST __t21 = _t;
			AST tmp2_AST_in = (AST)_t;
			match(_t,VARIABLE_DEF);
			_t = _t.getFirstChild();
			modifiers(_t);
			_t = _retTree;
			typeSpec(_t);
			_t = _retTree;
			variableDeclarator(_t);
			_t = _retTree;
			varInitializer(_t);
			_t = _retTree;
			_t = __t21;
			_t = _t.getNextSibling();
		}
		catch (RecognitionException ex) {
			reportError(ex);
			if (_t!=null) {_t = _t.getNextSibling();}
		}
		_retTree = _t;
	}
	
	public final void primaryExpression(AST _t) throws RecognitionException {
		
		AST primaryExpression_AST_in = (AST)_t;
		
		try {      // for error handling
			if (_t==null) _t=ASTNULL;
			switch ( _t.getType()) {
			case IDENT:
			{
				AST tmp3_AST_in = (AST)_t;
				match(_t,IDENT);
				_t = _t.getNextSibling();
				_currentExprValue = null;
				break;
			}
			case DOT:
			{
				AST __t84 = _t;
				AST tmp4_AST_in = (AST)_t;
				match(_t,DOT);
				_t = _t.getFirstChild();
				{
				if (_t==null) _t=ASTNULL;
				switch ( _t.getType()) {
				case TYPE:
				case TYPECAST:
				case INDEX_OP:
				case POST_INC:
				case POST_DEC:
				case METHOD_CALL:
				case UNARY_MINUS:
				case UNARY_PLUS:
				case IDENT:
				case DOT:
				case STAR:
				case LITERAL_this:
				case LITERAL_super:
				case ASSIGN:
				case PLUS_ASSIGN:
				case MINUS_ASSIGN:
				case STAR_ASSIGN:
				case DIV_ASSIGN:
				case MOD_ASSIGN:
				case SR_ASSIGN:
				case BSR_ASSIGN:
				case SL_ASSIGN:
				case BAND_ASSIGN:
				case BXOR_ASSIGN:
				case BOR_ASSIGN:
				case QUESTION:
				case LOR:
				case LAND:
				case BOR:
				case BXOR:
				case BAND:
				case NOT_EQUAL:
				case EQUAL:
				case LT:
				case GT:
				case LE:
				case GE:
				case LITERAL_instanceof:
				case SL:
				case SR:
				case BSR:
				case PLUS:
				case MINUS:
				case DIV:
				case MOD:
				case INC:
				case DEC:
				case BNOT:
				case LNOT:
				case LITERAL_true:
				case LITERAL_false:
				case LITERAL_null:
				case LITERAL_new:
				case NUM_INT:
				case CHAR_LITERAL:
				case STRING_LITERAL:
				case NUM_FLOAT:
				case NUM_LONG:
				case NUM_DOUBLE:
				{
					expr(_t);
					_t = _retTree;
					{
					if (_t==null) _t=ASTNULL;
					switch ( _t.getType()) {
					case IDENT:
					{
						AST tmp5_AST_in = (AST)_t;
						match(_t,IDENT);
						_t = _t.getNextSibling();
						break;
					}
					case INDEX_OP:
					{
						arrayIndex(_t);
						_t = _retTree;
						break;
					}
					case LITERAL_this:
					{
						AST tmp6_AST_in = (AST)_t;
						match(_t,LITERAL_this);
						_t = _t.getNextSibling();
						break;
					}
					case LITERAL_class:
					{
						AST tmp7_AST_in = (AST)_t;
						match(_t,LITERAL_class);
						_t = _t.getNextSibling();
						break;
					}
					case LITERAL_new:
					{
						AST __t87 = _t;
						AST tmp8_AST_in = (AST)_t;
						match(_t,LITERAL_new);
						_t = _t.getFirstChild();
						AST tmp9_AST_in = (AST)_t;
						match(_t,IDENT);
						_t = _t.getNextSibling();
						elist(_t);
						_t = _retTree;
						_t = __t87;
						_t = _t.getNextSibling();
						break;
					}
					case LITERAL_super:
					{
						AST tmp10_AST_in = (AST)_t;
						match(_t,LITERAL_super);
						_t = _t.getNextSibling();
						break;
					}
					default:
					{
						throw new NoViableAltException(_t);
					}
					}
					}
					break;
				}
				case ARRAY_DECLARATOR:
				{
					AST __t88 = _t;
					AST tmp11_AST_in = (AST)_t;
					match(_t,ARRAY_DECLARATOR);
					_t = _t.getFirstChild();
					typeSpecArray(_t);
					_t = _retTree;
					_t = __t88;
					_t = _t.getNextSibling();
					break;
				}
				case LITERAL_void:
				case LITERAL_boolean:
				case LITERAL_byte:
				case LITERAL_char:
				case LITERAL_short:
				case LITERAL_int:
				case LITERAL_float:
				case LITERAL_long:
				case LITERAL_double:
				{
					builtInType(_t);
					_t = _retTree;
					{
					if (_t==null) _t=ASTNULL;
					switch ( _t.getType()) {
					case LITERAL_class:
					{
						AST tmp12_AST_in = (AST)_t;
						match(_t,LITERAL_class);
						_t = _t.getNextSibling();
						break;
					}
					case 3:
					{
						break;
					}
					default:
					{
						throw new NoViableAltException(_t);
					}
					}
					}
					break;
				}
				default:
				{
					throw new NoViableAltException(_t);
				}
				}
				}
				_t = __t84;
				_t = _t.getNextSibling();
				_currentExprValue = null;
				break;
			}
			case INDEX_OP:
			{
				arrayIndex(_t);
				_t = _retTree;
				_currentExprValue = null;
				break;
			}
			case METHOD_CALL:
			{
				AST __t90 = _t;
				AST tmp13_AST_in = (AST)_t;
				match(_t,METHOD_CALL);
				_t = _t.getFirstChild();
				primaryExpression(_t);
				_t = _retTree;
				elist(_t);
				_t = _retTree;
				_t = __t90;
				_t = _t.getNextSibling();
				_currentExprValue = null;
				break;
			}
			case TYPECAST:
			{
				AST __t91 = _t;
				AST tmp14_AST_in = (AST)_t;
				match(_t,TYPECAST);
				_t = _t.getFirstChild();
				typeSpec(_t);
				_t = _retTree;
				expr(_t);
				_t = _retTree;
				_t = __t91;
				_t = _t.getNextSibling();
				_currentExprValue = null;
				break;
			}
			case LITERAL_new:
			{
				newExpression(_t);
				_t = _retTree;
				_currentExprValue = null;
				break;
			}
			case NUM_INT:
			case CHAR_LITERAL:
			case STRING_LITERAL:
			case NUM_FLOAT:
			case NUM_LONG:
			case NUM_DOUBLE:
			{
				constant(_t);
				_t = _retTree;
				break;
			}
			case LITERAL_super:
			{
				AST tmp15_AST_in = (AST)_t;
				match(_t,LITERAL_super);
				_t = _t.getNextSibling();
				_currentExprValue = null;
				break;
			}
			case LITERAL_true:
			{
				AST tmp16_AST_in = (AST)_t;
				match(_t,LITERAL_true);
				_t = _t.getNextSibling();
				_currentExprValue = new Boolean(true);
				break;
			}
			case LITERAL_false:
			{
				AST tmp17_AST_in = (AST)_t;
				match(_t,LITERAL_false);
				_t = _t.getNextSibling();
				_currentExprValue = new Boolean(false);
				break;
			}
			case LITERAL_this:
			{
				AST tmp18_AST_in = (AST)_t;
				match(_t,LITERAL_this);
				_t = _t.getNextSibling();
				_currentExprValue = null;
				break;
			}
			case LITERAL_null:
			{
				AST tmp19_AST_in = (AST)_t;
				match(_t,LITERAL_null);
				_t = _t.getNextSibling();
				_currentExprValue = new Object(); /* e uma cte! */
				break;
			}
			case TYPE:
			{
				typeSpec(_t);
				_t = _retTree;
				break;
			}
			default:
			{
				throw new NoViableAltException(_t);
			}
			}
		}
		catch (RecognitionException ex) {
			reportError(ex);
			if (_t!=null) {_t = _t.getNextSibling();}
		}
		_retTree = _t;
	}
	
	public final void elist(AST _t) throws RecognitionException {
		
		AST elist_AST_in = (AST)_t;
		
		try {      // for error handling
			AST __t36 = _t;
			AST tmp20_AST_in = (AST)_t;
			match(_t,ELIST);
			_t = _t.getFirstChild();
			{
			_loop38:
			do {
				if (_t==null) _t=ASTNULL;
				if ((_t.getType()==EXPR)) {
					expression(_t);
					_t = _retTree;
				}
				else {
					break _loop38;
				}
				
			} while (true);
			}
			_t = __t36;
			_t = _t.getNextSibling();
		}
		catch (RecognitionException ex) {
			reportError(ex);
			if (_t!=null) {_t = _t.getNextSibling();}
		}
		_retTree = _t;
	}
	
	public final void expression(AST _t) throws RecognitionException {
		
		AST expression_AST_in = (AST)_t;
		
		try {      // for error handling
			AST __t40 = _t;
			AST tmp21_AST_in = (AST)_t;
			match(_t,EXPR);
			_t = _t.getFirstChild();
			expr(_t);
			_t = _retTree;
			_t = __t40;
			_t = _t.getNextSibling();
		}
		catch (RecognitionException ex) {
			reportError(ex);
			if (_t!=null) {_t = _t.getNextSibling();}
		}
		_retTree = _t;
	}
	
	public final void ctorCall(AST _t) throws RecognitionException {
		
		AST ctorCall_AST_in = (AST)_t;
		
		try {      // for error handling
			if (_t==null) _t=ASTNULL;
			switch ( _t.getType()) {
			case CTOR_CALL:
			{
				AST __t4 = _t;
				AST tmp22_AST_in = (AST)_t;
				match(_t,CTOR_CALL);
				_t = _t.getFirstChild();
				elist(_t);
				_t = _retTree;
				_t = __t4;
				_t = _t.getNextSibling();
				break;
			}
			case SUPER_CTOR_CALL:
			{
				AST __t5 = _t;
				AST tmp23_AST_in = (AST)_t;
				match(_t,SUPER_CTOR_CALL);
				_t = _t.getFirstChild();
				{
				if (_t==null) _t=ASTNULL;
				switch ( _t.getType()) {
				case ELIST:
				{
					elist(_t);
					_t = _retTree;
					break;
				}
				case TYPE:
				case TYPECAST:
				case INDEX_OP:
				case METHOD_CALL:
				case IDENT:
				case DOT:
				case LITERAL_this:
				case LITERAL_super:
				case LITERAL_true:
				case LITERAL_false:
				case LITERAL_null:
				case LITERAL_new:
				case NUM_INT:
				case CHAR_LITERAL:
				case STRING_LITERAL:
				case NUM_FLOAT:
				case NUM_LONG:
				case NUM_DOUBLE:
				{
					primaryExpression(_t);
					_t = _retTree;
					elist(_t);
					_t = _retTree;
					break;
				}
				default:
				{
					throw new NoViableAltException(_t);
				}
				}
				}
				_t = __t5;
				_t = _t.getNextSibling();
				break;
			}
			default:
			{
				throw new NoViableAltException(_t);
			}
			}
		}
		catch (RecognitionException ex) {
			reportError(ex);
			if (_t!=null) {_t = _t.getNextSibling();}
		}
		_retTree = _t;
	}
	
	public final void typeSpec(AST _t) throws RecognitionException {
		
		AST typeSpec_AST_in = (AST)_t;
		
		try {      // for error handling
			AST __t8 = _t;
			AST tmp24_AST_in = (AST)_t;
			match(_t,TYPE);
			_t = _t.getFirstChild();
			typeSpecArray(_t);
			_t = _retTree;
			_t = __t8;
			_t = _t.getNextSibling();
		}
		catch (RecognitionException ex) {
			reportError(ex);
			if (_t!=null) {_t = _t.getNextSibling();}
		}
		_retTree = _t;
	}
	
	public final void typeSpecArray(AST _t) throws RecognitionException {
		
		AST typeSpecArray_AST_in = (AST)_t;
		
		try {      // for error handling
			if (_t==null) _t=ASTNULL;
			switch ( _t.getType()) {
			case ARRAY_DECLARATOR:
			{
				AST __t11 = _t;
				AST tmp25_AST_in = (AST)_t;
				match(_t,ARRAY_DECLARATOR);
				_t = _t.getFirstChild();
				typeSpecArray(_t);
				_t = _retTree;
				_t = __t11;
				_t = _t.getNextSibling();
				break;
			}
			case LITERAL_void:
			case LITERAL_boolean:
			case LITERAL_byte:
			case LITERAL_char:
			case LITERAL_short:
			case LITERAL_int:
			case LITERAL_float:
			case LITERAL_long:
			case LITERAL_double:
			case IDENT:
			case DOT:
			{
				type(_t);
				_t = _retTree;
				break;
			}
			default:
			{
				throw new NoViableAltException(_t);
			}
			}
		}
		catch (RecognitionException ex) {
			reportError(ex);
			if (_t!=null) {_t = _t.getNextSibling();}
		}
		_retTree = _t;
	}
	
	public final void type(AST _t) throws RecognitionException {
		
		AST type_AST_in = (AST)_t;
		
		try {      // for error handling
			if (_t==null) _t=ASTNULL;
			switch ( _t.getType()) {
			case IDENT:
			case DOT:
			{
				identifier(_t);
				_t = _retTree;
				break;
			}
			case LITERAL_void:
			case LITERAL_boolean:
			case LITERAL_byte:
			case LITERAL_char:
			case LITERAL_short:
			case LITERAL_int:
			case LITERAL_float:
			case LITERAL_long:
			case LITERAL_double:
			{
				builtInType(_t);
				_t = _retTree;
				break;
			}
			default:
			{
				throw new NoViableAltException(_t);
			}
			}
		}
		catch (RecognitionException ex) {
			reportError(ex);
			if (_t!=null) {_t = _t.getNextSibling();}
		}
		_retTree = _t;
	}
	
	public final void identifier(AST _t) throws RecognitionException {
		
		AST identifier_AST_in = (AST)_t;
		
		try {      // for error handling
			if (_t==null) _t=ASTNULL;
			switch ( _t.getType()) {
			case IDENT:
			{
				AST tmp26_AST_in = (AST)_t;
				match(_t,IDENT);
				_t = _t.getNextSibling();
				break;
			}
			case DOT:
			{
				AST __t31 = _t;
				AST tmp27_AST_in = (AST)_t;
				match(_t,DOT);
				_t = _t.getFirstChild();
				identifier(_t);
				_t = _retTree;
				AST tmp28_AST_in = (AST)_t;
				match(_t,IDENT);
				_t = _t.getNextSibling();
				_t = __t31;
				_t = _t.getNextSibling();
				break;
			}
			default:
			{
				throw new NoViableAltException(_t);
			}
			}
		}
		catch (RecognitionException ex) {
			reportError(ex);
			if (_t!=null) {_t = _t.getNextSibling();}
		}
		_retTree = _t;
	}
	
	public final void builtInType(AST _t) throws RecognitionException {
		
		AST builtInType_AST_in = (AST)_t;
		
		try {      // for error handling
			if (_t==null) _t=ASTNULL;
			switch ( _t.getType()) {
			case LITERAL_void:
			{
				AST tmp29_AST_in = (AST)_t;
				match(_t,LITERAL_void);
				_t = _t.getNextSibling();
				break;
			}
			case LITERAL_boolean:
			{
				AST tmp30_AST_in = (AST)_t;
				match(_t,LITERAL_boolean);
				_t = _t.getNextSibling();
				break;
			}
			case LITERAL_byte:
			{
				AST tmp31_AST_in = (AST)_t;
				match(_t,LITERAL_byte);
				_t = _t.getNextSibling();
				break;
			}
			case LITERAL_char:
			{
				AST tmp32_AST_in = (AST)_t;
				match(_t,LITERAL_char);
				_t = _t.getNextSibling();
				break;
			}
			case LITERAL_short:
			{
				AST tmp33_AST_in = (AST)_t;
				match(_t,LITERAL_short);
				_t = _t.getNextSibling();
				break;
			}
			case LITERAL_int:
			{
				AST tmp34_AST_in = (AST)_t;
				match(_t,LITERAL_int);
				_t = _t.getNextSibling();
				break;
			}
			case LITERAL_float:
			{
				AST tmp35_AST_in = (AST)_t;
				match(_t,LITERAL_float);
				_t = _t.getNextSibling();
				break;
			}
			case LITERAL_long:
			{
				AST tmp36_AST_in = (AST)_t;
				match(_t,LITERAL_long);
				_t = _t.getNextSibling();
				break;
			}
			case LITERAL_double:
			{
				AST tmp37_AST_in = (AST)_t;
				match(_t,LITERAL_double);
				_t = _t.getNextSibling();
				break;
			}
			default:
			{
				throw new NoViableAltException(_t);
			}
			}
		}
		catch (RecognitionException ex) {
			reportError(ex);
			if (_t!=null) {_t = _t.getNextSibling();}
		}
		_retTree = _t;
	}
	
	public final void modifiers(AST _t) throws RecognitionException {
		
		AST modifiers_AST_in = (AST)_t;
		
		try {      // for error handling
			AST __t14 = _t;
			AST tmp38_AST_in = (AST)_t;
			match(_t,MODIFIERS);
			_t = _t.getFirstChild();
			{
			_loop16:
			do {
				if (_t==null) _t=ASTNULL;
				if ((_tokenSet_0.member(_t.getType()))) {
					modifier(_t);
					_t = _retTree;
				}
				else {
					break _loop16;
				}
				
			} while (true);
			}
			_t = __t14;
			_t = _t.getNextSibling();
		}
		catch (RecognitionException ex) {
			reportError(ex);
			if (_t!=null) {_t = _t.getNextSibling();}
		}
		_retTree = _t;
	}
	
	public final void modifier(AST _t) throws RecognitionException {
		
		AST modifier_AST_in = (AST)_t;
		
		try {      // for error handling
			if (_t==null) _t=ASTNULL;
			switch ( _t.getType()) {
			case LITERAL_private:
			{
				AST tmp39_AST_in = (AST)_t;
				match(_t,LITERAL_private);
				_t = _t.getNextSibling();
				break;
			}
			case LITERAL_public:
			{
				AST tmp40_AST_in = (AST)_t;
				match(_t,LITERAL_public);
				_t = _t.getNextSibling();
				break;
			}
			case LITERAL_protected:
			{
				AST tmp41_AST_in = (AST)_t;
				match(_t,LITERAL_protected);
				_t = _t.getNextSibling();
				break;
			}
			case LITERAL_static:
			{
				AST tmp42_AST_in = (AST)_t;
				match(_t,LITERAL_static);
				_t = _t.getNextSibling();
				break;
			}
			case LITERAL_transient:
			{
				AST tmp43_AST_in = (AST)_t;
				match(_t,LITERAL_transient);
				_t = _t.getNextSibling();
				break;
			}
			case FINAL:
			{
				AST tmp44_AST_in = (AST)_t;
				match(_t,FINAL);
				_t = _t.getNextSibling();
				break;
			}
			case ABSTRACT:
			{
				AST tmp45_AST_in = (AST)_t;
				match(_t,ABSTRACT);
				_t = _t.getNextSibling();
				break;
			}
			case LITERAL_native:
			{
				AST tmp46_AST_in = (AST)_t;
				match(_t,LITERAL_native);
				_t = _t.getNextSibling();
				break;
			}
			case LITERAL_threadsafe:
			{
				AST tmp47_AST_in = (AST)_t;
				match(_t,LITERAL_threadsafe);
				_t = _t.getNextSibling();
				break;
			}
			case LITERAL_synchronized:
			{
				AST tmp48_AST_in = (AST)_t;
				match(_t,LITERAL_synchronized);
				_t = _t.getNextSibling();
				break;
			}
			case LITERAL_const:
			{
				AST tmp49_AST_in = (AST)_t;
				match(_t,LITERAL_const);
				_t = _t.getNextSibling();
				break;
			}
			case LITERAL_volatile:
			{
				AST tmp50_AST_in = (AST)_t;
				match(_t,LITERAL_volatile);
				_t = _t.getNextSibling();
				break;
			}
			case STRICTFP:
			{
				AST tmp51_AST_in = (AST)_t;
				match(_t,STRICTFP);
				_t = _t.getNextSibling();
				break;
			}
			default:
			{
				throw new NoViableAltException(_t);
			}
			}
		}
		catch (RecognitionException ex) {
			reportError(ex);
			if (_t!=null) {_t = _t.getNextSibling();}
		}
		_retTree = _t;
	}
	
	public final void parameterDef(AST _t) throws RecognitionException {
		
		AST parameterDef_AST_in = (AST)_t;
		
		try {      // for error handling
			AST __t19 = _t;
			AST tmp52_AST_in = (AST)_t;
			match(_t,PARAMETER_DEF);
			_t = _t.getFirstChild();
			modifiers(_t);
			_t = _retTree;
			typeSpec(_t);
			_t = _retTree;
			AST tmp53_AST_in = (AST)_t;
			match(_t,IDENT);
			_t = _t.getNextSibling();
			_t = __t19;
			_t = _t.getNextSibling();
		}
		catch (RecognitionException ex) {
			reportError(ex);
			if (_t!=null) {_t = _t.getNextSibling();}
		}
		_retTree = _t;
	}
	
	public final void variableDeclarator(AST _t) throws RecognitionException {
		
		AST variableDeclarator_AST_in = (AST)_t;
		
		try {      // for error handling
			if (_t==null) _t=ASTNULL;
			switch ( _t.getType()) {
			case IDENT:
			{
				AST tmp54_AST_in = (AST)_t;
				match(_t,IDENT);
				_t = _t.getNextSibling();
				break;
			}
			case LBRACK:
			{
				AST tmp55_AST_in = (AST)_t;
				match(_t,LBRACK);
				_t = _t.getNextSibling();
				variableDeclarator(_t);
				_t = _retTree;
				break;
			}
			default:
			{
				throw new NoViableAltException(_t);
			}
			}
		}
		catch (RecognitionException ex) {
			reportError(ex);
			if (_t!=null) {_t = _t.getNextSibling();}
		}
		_retTree = _t;
	}
	
	public final void varInitializer(AST _t) throws RecognitionException {
		
		AST varInitializer_AST_in = (AST)_t;
		
		try {      // for error handling
			if (_t==null) _t=ASTNULL;
			switch ( _t.getType()) {
			case ASSIGN:
			{
				AST __t24 = _t;
				AST tmp56_AST_in = (AST)_t;
				match(_t,ASSIGN);
				_t = _t.getFirstChild();
				initializer(_t);
				_t = _retTree;
				_t = __t24;
				_t = _t.getNextSibling();
				break;
			}
			case 3:
			{
				break;
			}
			default:
			{
				throw new NoViableAltException(_t);
			}
			}
		}
		catch (RecognitionException ex) {
			reportError(ex);
			if (_t!=null) {_t = _t.getNextSibling();}
		}
		_retTree = _t;
	}
	
	public final void initializer(AST _t) throws RecognitionException {
		
		AST initializer_AST_in = (AST)_t;
		
		try {      // for error handling
			if (_t==null) _t=ASTNULL;
			switch ( _t.getType()) {
			case EXPR:
			{
				expression(_t);
				_t = _retTree;
				break;
			}
			case ARRAY_INIT:
			{
				arrayInitializer(_t);
				_t = _retTree;
				break;
			}
			default:
			{
				throw new NoViableAltException(_t);
			}
			}
		}
		catch (RecognitionException ex) {
			reportError(ex);
			if (_t!=null) {_t = _t.getNextSibling();}
		}
		_retTree = _t;
	}
	
	public final void arrayInitializer(AST _t) throws RecognitionException {
		
		AST arrayInitializer_AST_in = (AST)_t;
		
		try {      // for error handling
			AST __t27 = _t;
			AST tmp57_AST_in = (AST)_t;
			match(_t,ARRAY_INIT);
			_t = _t.getFirstChild();
			{
			_loop29:
			do {
				if (_t==null) _t=ASTNULL;
				if ((_t.getType()==EXPR||_t.getType()==ARRAY_INIT)) {
					initializer(_t);
					_t = _retTree;
				}
				else {
					break _loop29;
				}
				
			} while (true);
			}
			_t = __t27;
			_t = _t.getNextSibling();
		}
		catch (RecognitionException ex) {
			reportError(ex);
			if (_t!=null) {_t = _t.getNextSibling();}
		}
		_retTree = _t;
	}
	
	public final void identifierStar(AST _t) throws RecognitionException {
		
		AST identifierStar_AST_in = (AST)_t;
		
		try {      // for error handling
			if (_t==null) _t=ASTNULL;
			switch ( _t.getType()) {
			case IDENT:
			{
				AST tmp58_AST_in = (AST)_t;
				match(_t,IDENT);
				_t = _t.getNextSibling();
				break;
			}
			case DOT:
			{
				AST __t33 = _t;
				AST tmp59_AST_in = (AST)_t;
				match(_t,DOT);
				_t = _t.getFirstChild();
				identifier(_t);
				_t = _retTree;
				{
				if (_t==null) _t=ASTNULL;
				switch ( _t.getType()) {
				case STAR:
				{
					AST tmp60_AST_in = (AST)_t;
					match(_t,STAR);
					_t = _t.getNextSibling();
					break;
				}
				case IDENT:
				{
					AST tmp61_AST_in = (AST)_t;
					match(_t,IDENT);
					_t = _t.getNextSibling();
					break;
				}
				default:
				{
					throw new NoViableAltException(_t);
				}
				}
				}
				_t = __t33;
				_t = _t.getNextSibling();
				break;
			}
			default:
			{
				throw new NoViableAltException(_t);
			}
			}
		}
		catch (RecognitionException ex) {
			reportError(ex);
			if (_t!=null) {_t = _t.getNextSibling();}
		}
		_retTree = _t;
	}
	
	public final void expr(AST _t) throws RecognitionException {
		
		AST expr_AST_in = (AST)_t;
		AST nasig = null;
		AST nlor = null;
		AST nland = null;
		AST nbor = null;
		AST nbxor = null;
		AST nband = null;
		AST nneq = null;
		AST neq = null;
		AST nlt = null;
		AST ngt = null;
		AST nle = null;
		AST nge = null;
		AST nsl = null;
		AST nsr = null;
		AST nbsr = null;
		AST nplus = null;
		AST nminus = null;
		AST ndiv = null;
		AST nmod = null;
		AST nstar = null;
		AST ninc = null;
		AST ndec = null;
		AST npostinc = null;
		AST npostdec = null;
		AST nbnot = null;
		AST nlnot = null;
		AST unarym = null;
		AST unaryp = null;
		
		try {      // for error handling
			if (_t==null) _t=ASTNULL;
			switch ( _t.getType()) {
			case QUESTION:
			{
				AST __t42 = _t;
				AST tmp62_AST_in = (AST)_t;
				match(_t,QUESTION);
				_t = _t.getFirstChild();
				expr(_t);
				_t = _retTree;
				expr(_t);
				_t = _retTree;
				expr(_t);
				_t = _retTree;
				_t = __t42;
				_t = _t.getNextSibling();
				break;
			}
			case ASSIGN:
			{
				AST __t43 = _t;
				nasig = _t==ASTNULL ? null :(AST)_t;
				match(_t,ASSIGN);
				_t = _t.getFirstChild();
				expr(_t);
				_t = _retTree;
				expr(_t);
				_t = _retTree;
				
					
						
				_t = __t43;
				_t = _t.getNextSibling();
				break;
			}
			case PLUS_ASSIGN:
			{
				AST __t44 = _t;
				AST tmp63_AST_in = (AST)_t;
				match(_t,PLUS_ASSIGN);
				_t = _t.getFirstChild();
				expr(_t);
				_t = _retTree;
				expr(_t);
				_t = _retTree;
				_currentExprValue = null;
				_t = __t44;
				_t = _t.getNextSibling();
				break;
			}
			case MINUS_ASSIGN:
			{
				AST __t45 = _t;
				AST tmp64_AST_in = (AST)_t;
				match(_t,MINUS_ASSIGN);
				_t = _t.getFirstChild();
				expr(_t);
				_t = _retTree;
				expr(_t);
				_t = _retTree;
				_currentExprValue = null;
				_t = __t45;
				_t = _t.getNextSibling();
				break;
			}
			case STAR_ASSIGN:
			{
				AST __t46 = _t;
				AST tmp65_AST_in = (AST)_t;
				match(_t,STAR_ASSIGN);
				_t = _t.getFirstChild();
				expr(_t);
				_t = _retTree;
				expr(_t);
				_t = _retTree;
				_currentExprValue = null;
				_t = __t46;
				_t = _t.getNextSibling();
				break;
			}
			case DIV_ASSIGN:
			{
				AST __t47 = _t;
				AST tmp66_AST_in = (AST)_t;
				match(_t,DIV_ASSIGN);
				_t = _t.getFirstChild();
				expr(_t);
				_t = _retTree;
				expr(_t);
				_t = _retTree;
				_currentExprValue = null;
				_t = __t47;
				_t = _t.getNextSibling();
				break;
			}
			case MOD_ASSIGN:
			{
				AST __t48 = _t;
				AST tmp67_AST_in = (AST)_t;
				match(_t,MOD_ASSIGN);
				_t = _t.getFirstChild();
				expr(_t);
				_t = _retTree;
				expr(_t);
				_t = _retTree;
				_currentExprValue = null;
				_t = __t48;
				_t = _t.getNextSibling();
				break;
			}
			case SR_ASSIGN:
			{
				AST __t49 = _t;
				AST tmp68_AST_in = (AST)_t;
				match(_t,SR_ASSIGN);
				_t = _t.getFirstChild();
				expr(_t);
				_t = _retTree;
				expr(_t);
				_t = _retTree;
				_currentExprValue = null;
				_t = __t49;
				_t = _t.getNextSibling();
				break;
			}
			case BSR_ASSIGN:
			{
				AST __t50 = _t;
				AST tmp69_AST_in = (AST)_t;
				match(_t,BSR_ASSIGN);
				_t = _t.getFirstChild();
				expr(_t);
				_t = _retTree;
				expr(_t);
				_t = _retTree;
				_currentExprValue = null;
				_t = __t50;
				_t = _t.getNextSibling();
				break;
			}
			case SL_ASSIGN:
			{
				AST __t51 = _t;
				AST tmp70_AST_in = (AST)_t;
				match(_t,SL_ASSIGN);
				_t = _t.getFirstChild();
				expr(_t);
				_t = _retTree;
				expr(_t);
				_t = _retTree;
				_currentExprValue = null;
				_t = __t51;
				_t = _t.getNextSibling();
				break;
			}
			case BAND_ASSIGN:
			{
				AST __t52 = _t;
				AST tmp71_AST_in = (AST)_t;
				match(_t,BAND_ASSIGN);
				_t = _t.getFirstChild();
				expr(_t);
				_t = _retTree;
				expr(_t);
				_t = _retTree;
				_currentExprValue = null;
				_t = __t52;
				_t = _t.getNextSibling();
				break;
			}
			case BXOR_ASSIGN:
			{
				AST __t53 = _t;
				AST tmp72_AST_in = (AST)_t;
				match(_t,BXOR_ASSIGN);
				_t = _t.getFirstChild();
				expr(_t);
				_t = _retTree;
				expr(_t);
				_t = _retTree;
				_currentExprValue = null;
				_t = __t53;
				_t = _t.getNextSibling();
				break;
			}
			case BOR_ASSIGN:
			{
				AST __t54 = _t;
				AST tmp73_AST_in = (AST)_t;
				match(_t,BOR_ASSIGN);
				_t = _t.getFirstChild();
				expr(_t);
				_t = _retTree;
				expr(_t);
				_t = _retTree;
				_currentExprValue = null;
				_t = __t54;
				_t = _t.getNextSibling();
				break;
			}
			case LOR:
			{
				AST __t55 = _t;
				nlor = _t==ASTNULL ? null :(AST)_t;
				match(_t,LOR);
				_t = _t.getFirstChild();
				Object v1, v2;
				expr(_t);
				_t = _retTree;
				v1 = _currentExprValue;
				expr(_t);
				_t = _retTree;
				v2 = _currentExprValue;
				
						         if(v1 == null || v2 == null) {
							     _currentExprValue = null;
							 }
						         else
						         if((v1 instanceof Boolean) &&
							    (v2 instanceof Boolean) ) {
				
							     boolean b1 = ((Boolean)v1).booleanValue();
							     boolean b2 = ((Boolean)v2).booleanValue();
				
							     _currentExprValue = new Boolean(b1 | b2);	
							     _replaceAST(nlor, _currentExprValue);
							 }
							 else {
							    _currentExprValue = null;
							 }
						
				_t = __t55;
				_t = _t.getNextSibling();
				break;
			}
			case LAND:
			{
				AST __t56 = _t;
				nland = _t==ASTNULL ? null :(AST)_t;
				match(_t,LAND);
				_t = _t.getFirstChild();
				Object v1, v2;
				expr(_t);
				_t = _retTree;
				v1 = _currentExprValue;
				expr(_t);
				_t = _retTree;
				v2 = _currentExprValue;
				
						         if(v1 == null || v2 == null) {
							     _currentExprValue = null;
							 }
						         else
						         if((v1 instanceof Boolean) &&
							    (v2 instanceof Boolean) ) {
							  
							     boolean b1 = ((Boolean)v1).booleanValue();
							     boolean b2 = ((Boolean)v2).booleanValue();
							     _currentExprValue = new Boolean(b1 & b2);			     
							     _replaceAST(nland, _currentExprValue);
							 }
							 else {
							    _currentExprValue = null;
							 }
						
				_t = __t56;
				_t = _t.getNextSibling();
				break;
			}
			case BOR:
			{
				AST __t57 = _t;
				nbor = _t==ASTNULL ? null :(AST)_t;
				match(_t,BOR);
				_t = _t.getFirstChild();
				Object v1, v2;
				expr(_t);
				_t = _retTree;
				v1 = _currentExprValue;
				expr(_t);
				_t = _retTree;
				v2 = _currentExprValue;
				
						         if(v1 == null || v2 == null) {
							     _currentExprValue = null;
							 }
						         else		     
						         if((v1 instanceof Boolean) &&
							    (v2 instanceof Boolean) ) {
							  
							     boolean b1 = ((Boolean)v1).booleanValue();
							     boolean b2 = ((Boolean)v2).booleanValue();
							     _currentExprValue = new Boolean(b1 | b2);
				_replaceAST(nbor, _currentExprValue);
							 }
							 else {
							    _currentExprValue = null;
							 }
						
				_t = __t57;
				_t = _t.getNextSibling();
				break;
			}
			case BXOR:
			{
				AST __t58 = _t;
				nbxor = _t==ASTNULL ? null :(AST)_t;
				match(_t,BXOR);
				_t = _t.getFirstChild();
				Object v1, v2;
				expr(_t);
				_t = _retTree;
				v1 = _currentExprValue;
				expr(_t);
				_t = _retTree;
				v2 = _currentExprValue;
				
						         if(v1 == null || v2 == null) {
							     _currentExprValue = null;
							 }
						         else		     
						         if((v1 instanceof Boolean) &&
							    (v2 instanceof Boolean) ) {
							  
							     boolean b1 = ((Boolean)v1).booleanValue();
							     boolean b2 = ((Boolean)v2).booleanValue();
							     _currentExprValue = new Boolean((b1 & !b2) | (!b1 & b2));
							     _replaceAST(nbxor, _currentExprValue);
							 }
							 else {
							    _currentExprValue = null;
							 }
						
				_t = __t58;
				_t = _t.getNextSibling();
				break;
			}
			case BAND:
			{
				AST __t59 = _t;
				nband = _t==ASTNULL ? null :(AST)_t;
				match(_t,BAND);
				_t = _t.getFirstChild();
				Object v1, v2;
				expr(_t);
				_t = _retTree;
				v1 = _currentExprValue;
				expr(_t);
				_t = _retTree;
				v2 = _currentExprValue;
				
						         if(v1 == null || v2 == null) {
							     _currentExprValue = null;
							 }
						         else		     
						         if((v1 instanceof Boolean) &&
							    (v2 instanceof Boolean) ) {
				
							     boolean b1 = ((Boolean)v1).booleanValue();
							     boolean b2 = ((Boolean)v2).booleanValue();
							     _currentExprValue = new Boolean(b1 & b2);
				_replaceAST(nband, _currentExprValue);
							 }
							 else {
							    _currentExprValue = null;
							 }
						
				_t = __t59;
				_t = _t.getNextSibling();
				break;
			}
			case NOT_EQUAL:
			{
				AST __t60 = _t;
				nneq = _t==ASTNULL ? null :(AST)_t;
				match(_t,NOT_EQUAL);
				_t = _t.getFirstChild();
				Object v1, v2;
				expr(_t);
				_t = _retTree;
				v1 = _currentExprValue;
				expr(_t);
				_t = _retTree;
				v2 = _currentExprValue;
				
							       if(v1 == null || v2 == null) {
							           _currentExprValue = null;
							       }
						               else
							       if(v1.getClass().equals(v2.getClass())) {
								   if(v1.equals(v2)) {
								       _currentExprValue = new Boolean(false);
								   }
								   else {
								       _currentExprValue = new Boolean(true);				   
								   }
								   _replaceAST(nneq, _currentExprValue);
							       }
							       else {
							           _currentExprValue = null;
							       }
							
				_t = __t60;
				_t = _t.getNextSibling();
				break;
			}
			case EQUAL:
			{
				AST __t61 = _t;
				neq = _t==ASTNULL ? null :(AST)_t;
				match(_t,EQUAL);
				_t = _t.getFirstChild();
				Object v1, v2;
				expr(_t);
				_t = _retTree;
				v1 = _currentExprValue;
				expr(_t);
				_t = _retTree;
				v2 = _currentExprValue;
				
							       if(v1 == null || v2 == null) {
							           _currentExprValue = null;
							       }
						               else
							       if(v1.getClass().equals(v2.getClass())) {
								   if(v1.equals(v2)) {
								       _currentExprValue = new Boolean(true);
								   }
								   else {
								       _currentExprValue = new Boolean(false); 
								   }
								   _replaceAST(neq, _currentExprValue);
							       }
							       else {
							           _currentExprValue = null;
							       }			    
							
				_t = __t61;
				_t = _t.getNextSibling();
				break;
			}
			case LT:
			{
				AST __t62 = _t;
				nlt = _t==ASTNULL ? null :(AST)_t;
				match(_t,LT);
				_t = _t.getFirstChild();
				Object v1, v2;
				expr(_t);
				_t = _retTree;
				v1 = _currentExprValue;
				expr(_t);
				_t = _retTree;
				v2 = _currentExprValue;			
							    _oper(nlt, v1, v2);
							
				_t = __t62;
				_t = _t.getNextSibling();
				break;
			}
			case GT:
			{
				AST __t63 = _t;
				ngt = _t==ASTNULL ? null :(AST)_t;
				match(_t,GT);
				_t = _t.getFirstChild();
				Object v1, v2;
				expr(_t);
				_t = _retTree;
				v1 = _currentExprValue;
				expr(_t);
				_t = _retTree;
				v2 = _currentExprValue;
							    _oper(ngt, v1, v2);
							
				_t = __t63;
				_t = _t.getNextSibling();
				break;
			}
			case LE:
			{
				AST __t64 = _t;
				nle = _t==ASTNULL ? null :(AST)_t;
				match(_t,LE);
				_t = _t.getFirstChild();
				Object v1, v2;
				expr(_t);
				_t = _retTree;
				v1 = _currentExprValue;
				expr(_t);
				_t = _retTree;
				v2 = _currentExprValue;
							    _oper(nle, v1, v2);
							
				_t = __t64;
				_t = _t.getNextSibling();
				break;
			}
			case GE:
			{
				AST __t65 = _t;
				nge = _t==ASTNULL ? null :(AST)_t;
				match(_t,GE);
				_t = _t.getFirstChild();
				Object v1, v2;
				expr(_t);
				_t = _retTree;
				v1 = _currentExprValue;
				expr(_t);
				_t = _retTree;
				v2 = _currentExprValue;
							       _oper(nge, v1, v2);
							
				_t = __t65;
				_t = _t.getNextSibling();
				break;
			}
			case SL:
			{
				AST __t66 = _t;
				nsl = _t==ASTNULL ? null :(AST)_t;
				match(_t,SL);
				_t = _t.getFirstChild();
				Object v1, v2;
				expr(_t);
				_t = _retTree;
				v1 = _currentExprValue;
				expr(_t);
				_t = _retTree;
				v2 = _currentExprValue;
							       _oper(nsl, v1, v2);
							
				_t = __t66;
				_t = _t.getNextSibling();
				break;
			}
			case SR:
			{
				AST __t67 = _t;
				nsr = _t==ASTNULL ? null :(AST)_t;
				match(_t,SR);
				_t = _t.getFirstChild();
				Object v1, v2;
				expr(_t);
				_t = _retTree;
				v1 = _currentExprValue;
				expr(_t);
				_t = _retTree;
				v2 = _currentExprValue;
								_oper(nsr, v1, v2);
							
				_t = __t67;
				_t = _t.getNextSibling();
				break;
			}
			case BSR:
			{
				AST __t68 = _t;
				nbsr = _t==ASTNULL ? null :(AST)_t;
				match(_t,BSR);
				_t = _t.getFirstChild();
				Object v1, v2;
				expr(_t);
				_t = _retTree;
				v1 = _currentExprValue;
				expr(_t);
				_t = _retTree;
				v2 = _currentExprValue;
								_oper(nbsr, v1, v2);
							
				_t = __t68;
				_t = _t.getNextSibling();
				break;
			}
			case PLUS:
			{
				AST __t69 = _t;
				nplus = _t==ASTNULL ? null :(AST)_t;
				match(_t,PLUS);
				_t = _t.getFirstChild();
				Object v1, v2;
				expr(_t);
				_t = _retTree;
				v1 = _currentExprValue;
				expr(_t);
				_t = _retTree;
				v2 = _currentExprValue;
								_oper(nplus, v1, v2);
							
				_t = __t69;
				_t = _t.getNextSibling();
				break;
			}
			case MINUS:
			{
				AST __t70 = _t;
				nminus = _t==ASTNULL ? null :(AST)_t;
				match(_t,MINUS);
				_t = _t.getFirstChild();
				Object v1, v2;
				expr(_t);
				_t = _retTree;
				v1 = _currentExprValue;
				expr(_t);
				_t = _retTree;
				v2 = _currentExprValue;			
							       _oper(nminus, v1, v2);
							
				_t = __t70;
				_t = _t.getNextSibling();
				break;
			}
			case DIV:
			{
				AST __t71 = _t;
				ndiv = _t==ASTNULL ? null :(AST)_t;
				match(_t,DIV);
				_t = _t.getFirstChild();
				Object v1, v2;
				expr(_t);
				_t = _retTree;
				v1 = _currentExprValue;
				expr(_t);
				_t = _retTree;
				v2 = _currentExprValue;
							       _oper(ndiv, v1, v2);
							
				_t = __t71;
				_t = _t.getNextSibling();
				break;
			}
			case MOD:
			{
				AST __t72 = _t;
				nmod = _t==ASTNULL ? null :(AST)_t;
				match(_t,MOD);
				_t = _t.getFirstChild();
				Object v1, v2;
				expr(_t);
				_t = _retTree;
				v1 = _currentExprValue;
				expr(_t);
				_t = _retTree;
				v2 = _currentExprValue;
							       _oper(nmod, v1, v2);
							
				_t = __t72;
				_t = _t.getNextSibling();
				break;
			}
			case STAR:
			{
				AST __t73 = _t;
				nstar = _t==ASTNULL ? null :(AST)_t;
				match(_t,STAR);
				_t = _t.getFirstChild();
				Object v1, v2;
				expr(_t);
				_t = _retTree;
				v1 = _currentExprValue;
				expr(_t);
				_t = _retTree;
				v2 = _currentExprValue;
							       _oper(nstar, v1, v2);
							
				_t = __t73;
				_t = _t.getNextSibling();
				break;
			}
			case INC:
			{
				AST __t74 = _t;
				ninc = _t==ASTNULL ? null :(AST)_t;
				match(_t,INC);
				_t = _t.getFirstChild();
				expr(_t);
				_t = _retTree;
				
							    _oper(ninc, _currentExprValue);
							
				_t = __t74;
				_t = _t.getNextSibling();
				break;
			}
			case DEC:
			{
				AST __t75 = _t;
				ndec = _t==ASTNULL ? null :(AST)_t;
				match(_t,DEC);
				_t = _t.getFirstChild();
				expr(_t);
				_t = _retTree;
				
							    _oper(ndec, _currentExprValue);
							
				_t = __t75;
				_t = _t.getNextSibling();
				break;
			}
			case POST_INC:
			{
				AST __t76 = _t;
				npostinc = _t==ASTNULL ? null :(AST)_t;
				match(_t,POST_INC);
				_t = _t.getFirstChild();
				expr(_t);
				_t = _retTree;
				
							    _oper(npostinc, _currentExprValue);
							
				_t = __t76;
				_t = _t.getNextSibling();
				break;
			}
			case POST_DEC:
			{
				AST __t77 = _t;
				npostdec = _t==ASTNULL ? null :(AST)_t;
				match(_t,POST_DEC);
				_t = _t.getFirstChild();
				expr(_t);
				_t = _retTree;
				
							    _oper(npostdec, _currentExprValue);
							
				_t = __t77;
				_t = _t.getNextSibling();
				break;
			}
			case BNOT:
			{
				AST __t78 = _t;
				nbnot = _t==ASTNULL ? null :(AST)_t;
				match(_t,BNOT);
				_t = _t.getFirstChild();
				expr(_t);
				_t = _retTree;
				
							    if(_currentExprValue != null && 
							       _currentExprValue instanceof Boolean) {
				
							        boolean b1 = ((Boolean)_currentExprValue).booleanValue();
							        _currentExprValue = new Boolean(!b1);	
							        _replaceAST(nbnot, _currentExprValue);
							    }
							    else {
							        _currentExprValue = null;
							    }
						
				_t = __t78;
				_t = _t.getNextSibling();
				break;
			}
			case LNOT:
			{
				AST __t79 = _t;
				nlnot = _t==ASTNULL ? null :(AST)_t;
				match(_t,LNOT);
				_t = _t.getFirstChild();
				expr(_t);
				_t = _retTree;
				
							    if(_currentExprValue != null &&
							       _currentExprValue instanceof Boolean) {
				
							        boolean b1 = ((Boolean)_currentExprValue).booleanValue();
							        _currentExprValue = new Boolean(!b1);
							        _replaceAST(nlnot, _currentExprValue);
							    }
							    else {
							        _currentExprValue = null;
							    }
						
				_t = __t79;
				_t = _t.getNextSibling();
				break;
			}
			case LITERAL_instanceof:
			{
				AST __t80 = _t;
				AST tmp74_AST_in = (AST)_t;
				match(_t,LITERAL_instanceof);
				_t = _t.getFirstChild();
				expr(_t);
				_t = _retTree;
				expr(_t);
				_t = _retTree;
				_currentExprValue = null;
				_t = __t80;
				_t = _t.getNextSibling();
				break;
			}
			case UNARY_MINUS:
			{
				AST __t81 = _t;
				unarym = _t==ASTNULL ? null :(AST)_t;
				match(_t,UNARY_MINUS);
				_t = _t.getFirstChild();
				expr(_t);
				_t = _retTree;
				
							    _oper(unarym, _currentExprValue);
							
				_t = __t81;
				_t = _t.getNextSibling();
				break;
			}
			case UNARY_PLUS:
			{
				AST __t82 = _t;
				unaryp = _t==ASTNULL ? null :(AST)_t;
				match(_t,UNARY_PLUS);
				_t = _t.getFirstChild();
				expr(_t);
				_t = _retTree;
				
							    _oper(unaryp, _currentExprValue);
							
				_t = __t82;
				_t = _t.getNextSibling();
				break;
			}
			case TYPE:
			case TYPECAST:
			case INDEX_OP:
			case METHOD_CALL:
			case IDENT:
			case DOT:
			case LITERAL_this:
			case LITERAL_super:
			case LITERAL_true:
			case LITERAL_false:
			case LITERAL_null:
			case LITERAL_new:
			case NUM_INT:
			case CHAR_LITERAL:
			case STRING_LITERAL:
			case NUM_FLOAT:
			case NUM_LONG:
			case NUM_DOUBLE:
			{
				primaryExpression(_t);
				_t = _retTree;
				break;
			}
			default:
			{
				throw new NoViableAltException(_t);
			}
			}
		}
		catch (RecognitionException ex) {
			reportError(ex);
			if (_t!=null) {_t = _t.getNextSibling();}
		}
		_retTree = _t;
	}
	
	public final void arrayIndex(AST _t) throws RecognitionException {
		
		AST arrayIndex_AST_in = (AST)_t;
		
		try {      // for error handling
			AST __t93 = _t;
			AST tmp75_AST_in = (AST)_t;
			match(_t,INDEX_OP);
			_t = _t.getFirstChild();
			primaryExpression(_t);
			_t = _retTree;
			expression(_t);
			_t = _retTree;
			_t = __t93;
			_t = _t.getNextSibling();
		}
		catch (RecognitionException ex) {
			reportError(ex);
			if (_t!=null) {_t = _t.getNextSibling();}
		}
		_retTree = _t;
	}
	
	public final void newExpression(AST _t) throws RecognitionException {
		
		AST newExpression_AST_in = (AST)_t;
		
		try {      // for error handling
			AST __t96 = _t;
			AST tmp76_AST_in = (AST)_t;
			match(_t,LITERAL_new);
			_t = _t.getFirstChild();
			type(_t);
			_t = _retTree;
			{
			if (_t==null) _t=ASTNULL;
			switch ( _t.getType()) {
			case ARRAY_DECLARATOR:
			{
				newArrayDeclarator(_t);
				_t = _retTree;
				{
				if (_t==null) _t=ASTNULL;
				switch ( _t.getType()) {
				case ARRAY_INIT:
				{
					arrayInitializer(_t);
					_t = _retTree;
					break;
				}
				case 3:
				{
					break;
				}
				default:
				{
					throw new NoViableAltException(_t);
				}
				}
				}
				break;
			}
			case ELIST:
			{
				elist(_t);
				_t = _retTree;
				{
				if (_t==null) _t=ASTNULL;
				switch ( _t.getType()) {
				case OBJBLOCK:
				{
					objBlock(_t);
					_t = _retTree;
					break;
				}
				case 3:
				{
					break;
				}
				default:
				{
					throw new NoViableAltException(_t);
				}
				}
				}
				break;
			}
			default:
			{
				throw new NoViableAltException(_t);
			}
			}
			}
			_t = __t96;
			_t = _t.getNextSibling();
		}
		catch (RecognitionException ex) {
			reportError(ex);
			if (_t!=null) {_t = _t.getNextSibling();}
		}
		_retTree = _t;
	}
	
	public final void constant(AST _t) throws RecognitionException {
		
		AST constant_AST_in = (AST)_t;
		AST n1 = null;
		AST n2 = null;
		AST n3 = null;
		AST n4 = null;
		AST n5 = null;
		AST n6 = null;
		
		try {      // for error handling
			if (_t==null) _t=ASTNULL;
			switch ( _t.getType()) {
			case NUM_INT:
			{
				n1 = (AST)_t;
				match(_t,NUM_INT);
				_t = _t.getNextSibling();
				
				
				String s = n1.getText();
					    char [] chars = s.toCharArray();
					    if(chars.length > 2) {
					        if(chars[0] == '0' && chars[1] == 'x') {
					            s = s.substring(2);
						    _currentExprValue = new Integer(Integer.parseInt(s, 16));
					        }
					        else {
					            _currentExprValue = new Integer(s); 
					        }
					    }
					    else {
					       _currentExprValue = new Integer(s); 
					    }
					    
					    
				
				break;
			}
			case CHAR_LITERAL:
			{
				n2 = (AST)_t;
				match(_t,CHAR_LITERAL);
				_t = _t.getNextSibling();
				char [] v = n2.getText().toCharArray();
				_currentExprValue = new Character(v[0]);
				break;
			}
			case STRING_LITERAL:
			{
				n3 = (AST)_t;
				match(_t,STRING_LITERAL);
				_t = _t.getNextSibling();
				_currentExprValue = new String(n3.getText());
				break;
			}
			case NUM_FLOAT:
			{
				n4 = (AST)_t;
				match(_t,NUM_FLOAT);
				_t = _t.getNextSibling();
				_currentExprValue = new Float(n4.getText());
				break;
			}
			case NUM_DOUBLE:
			{
				n5 = (AST)_t;
				match(_t,NUM_DOUBLE);
				_t = _t.getNextSibling();
				_currentExprValue = new Double(n5.getText());
				break;
			}
			case NUM_LONG:
			{
				n6 = (AST)_t;
				match(_t,NUM_LONG);
				_t = _t.getNextSibling();
				
				
				StringTokenizer tk = new StringTokenizer(n6.getText(), "L");		      
				_currentExprValue = new Long(tk.nextToken()); 
						      
						
				break;
			}
			default:
			{
				throw new NoViableAltException(_t);
			}
			}
		}
		catch (RecognitionException ex) {
			reportError(ex);
			if (_t!=null) {_t = _t.getNextSibling();}
		}
		_retTree = _t;
	}
	
	public final void newArrayDeclarator(AST _t) throws RecognitionException {
		
		AST newArrayDeclarator_AST_in = (AST)_t;
		
		try {      // for error handling
			AST __t105 = _t;
			AST tmp77_AST_in = (AST)_t;
			match(_t,ARRAY_DECLARATOR);
			_t = _t.getFirstChild();
			{
			if (_t==null) _t=ASTNULL;
			switch ( _t.getType()) {
			case ARRAY_DECLARATOR:
			{
				newArrayDeclarator(_t);
				_t = _retTree;
				break;
			}
			case 3:
			case EXPR:
			{
				break;
			}
			default:
			{
				throw new NoViableAltException(_t);
			}
			}
			}
			{
			if (_t==null) _t=ASTNULL;
			switch ( _t.getType()) {
			case EXPR:
			{
				expression(_t);
				_t = _retTree;
				break;
			}
			case 3:
			{
				break;
			}
			default:
			{
				throw new NoViableAltException(_t);
			}
			}
			}
			_t = __t105;
			_t = _t.getNextSibling();
		}
		catch (RecognitionException ex) {
			reportError(ex);
			if (_t!=null) {_t = _t.getNextSibling();}
		}
		_retTree = _t;
	}
	
	public final void objBlock(AST _t) throws RecognitionException {
		
		AST objBlock_AST_in = (AST)_t;
		
		try {      // for error handling
			AST __t101 = _t;
			AST tmp78_AST_in = (AST)_t;
			match(_t,OBJBLOCK);
			_t = _t.getFirstChild();
			{
			_loop103:
			do {
				if (_t==null) _t=ASTNULL;
				if ((_t.getType()==VARIABLE_DEF)) {
					variableDef(_t);
					_t = _retTree;
				}
				else {
					break _loop103;
				}
				
			} while (true);
			}
			_t = __t101;
			_t = _t.getNextSibling();
		}
		catch (RecognitionException ex) {
			reportError(ex);
			if (_t!=null) {_t = _t.getNextSibling();}
		}
		_retTree = _t;
	}
	
	
	public static final String[] _tokenNames = {
		"<0>",
		"EOF",
		"<2>",
		"NULL_TREE_LOOKAHEAD",
		"BLOCK",
		"MODIFIERS",
		"OBJBLOCK",
		"SLIST",
		"CTOR_DEF",
		"METHOD_DEF",
		"VARIABLE_DEF",
		"INSTANCE_INIT",
		"STATIC_INIT",
		"TYPE",
		"CLASS_DEF",
		"INTERFACE_DEF",
		"PACKAGE_DEF",
		"ARRAY_DECLARATOR",
		"EXTENDS_CLAUSE",
		"IMPLEMENTS_CLAUSE",
		"PARAMETERS",
		"PARAMETER_DEF",
		"LABELED_STAT",
		"TYPECAST",
		"INDEX_OP",
		"POST_INC",
		"POST_DEC",
		"METHOD_CALL",
		"EXPR",
		"ARRAY_INIT",
		"IMPORT",
		"UNARY_MINUS",
		"UNARY_PLUS",
		"CASE_GROUP",
		"ELIST",
		"FOR_INIT",
		"FOR_CONDITION",
		"FOR_ITERATOR",
		"EMPTY_STAT",
		"\"final\"",
		"\"abstract\"",
		"\"strictfp\"",
		"SUPER_CTOR_CALL",
		"CTOR_CALL",
		"\"package\"",
		"SEMI",
		"\"import\"",
		"LBRACK",
		"RBRACK",
		"\"void\"",
		"\"boolean\"",
		"\"byte\"",
		"\"char\"",
		"\"short\"",
		"\"int\"",
		"\"float\"",
		"\"long\"",
		"\"double\"",
		"IDENT",
		"DOT",
		"STAR",
		"\"private\"",
		"\"public\"",
		"\"protected\"",
		"\"static\"",
		"\"transient\"",
		"\"native\"",
		"\"threadsafe\"",
		"\"synchronized\"",
		"\"volatile\"",
		"\"class\"",
		"\"extends\"",
		"\"interface\"",
		"LCURLY",
		"RCURLY",
		"COMMA",
		"\"implements\"",
		"LPAREN",
		"RPAREN",
		"\"this\"",
		"\"super\"",
		"ASSIGN",
		"\"throws\"",
		"COLON",
		"\"if\"",
		"\"else\"",
		"\"for\"",
		"\"while\"",
		"\"do\"",
		"\"break\"",
		"\"continue\"",
		"\"return\"",
		"\"switch\"",
		"\"throw\"",
		"\"case\"",
		"\"default\"",
		"\"try\"",
		"\"finally\"",
		"\"catch\"",
		"PLUS_ASSIGN",
		"MINUS_ASSIGN",
		"STAR_ASSIGN",
		"DIV_ASSIGN",
		"MOD_ASSIGN",
		"SR_ASSIGN",
		"BSR_ASSIGN",
		"SL_ASSIGN",
		"BAND_ASSIGN",
		"BXOR_ASSIGN",
		"BOR_ASSIGN",
		"QUESTION",
		"LOR",
		"LAND",
		"BOR",
		"BXOR",
		"BAND",
		"NOT_EQUAL",
		"EQUAL",
		"LT",
		"GT",
		"LE",
		"GE",
		"\"instanceof\"",
		"SL",
		"SR",
		"BSR",
		"PLUS",
		"MINUS",
		"DIV",
		"MOD",
		"INC",
		"DEC",
		"BNOT",
		"LNOT",
		"\"true\"",
		"\"false\"",
		"\"null\"",
		"\"new\"",
		"NUM_INT",
		"CHAR_LITERAL",
		"STRING_LITERAL",
		"NUM_FLOAT",
		"NUM_LONG",
		"NUM_DOUBLE",
		"WS",
		"SL_COMMENT",
		"ML_COMMENT",
		"ESC",
		"HEX_DIGIT",
		"VOCAB",
		"EXPONENT",
		"FLOAT_SUFFIX",
		"\"const\""
	};
	
	private static final long _tokenSet_0_data_[] = { -2305839160922996736L, 63L, 16777216L, 0L, 0L, 0L };
	public static final BitSet _tokenSet_0 = new BitSet(_tokenSet_0_data_);
	}
	
